package com.ljdemo.lrecorder.utils;

import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.util.Log;

import com.ljdemo.lrecorder.been.VideoInfo;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class VideoInfoUtil {
    private static final String TAG="视频信息处理类";

    /**
     * 从视频文件链表获取视频信息（封面，文件名，时长，创建时间，文件全名）
     * */
    public static List<VideoInfo> getVideoInfoList(List<File> videoFiles){
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        ArrayList<VideoInfo> videoInfos=new ArrayList<>();

        for (int i = 0; i < videoFiles.size(); i++) {
            try {
                retriever.setDataSource(videoFiles.get(i).getAbsolutePath());
                VideoInfo videoInfo=new VideoInfo();

                // 获取时长
                String duration=retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
                long duL = Long.parseLong(duration);
                videoInfo.setDuration(duL);
                //获取文件名
                String fileName = videoFiles.get(i).getName();
                videoInfo.setFileName(fileName);
                //获取创建时间
                long createTime=videoFiles.get(i).lastModified();
                videoInfo.setCreateTime(createTime);

                //读取中间一帧作为封面
                // 计算中间一帧的时间点
                long middleTime=duL/2;
                // 获取中间一帧的视频帧
                Bitmap bitmap=retriever.getFrameAtTime(middleTime * 1000,MediaMetadataRetriever.OPTION_CLOSEST_SYNC);
                videoInfo.setCover(bitmap);

                //获取路径
                String path=videoFiles.get(i).getPath();
                videoInfo.setFileFullName(path);

                // 添加
                videoInfos.add(videoInfo);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //释放资源
        try {
            retriever.release();
        } catch (IOException e) {
            Log.e(TAG,"释放资源时出错");
            throw new RuntimeException(e);
        }
        return videoInfos;
    }

}
